home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1994 October / Macformat17.cdr / Shareware City / Developers / shutdown-fx-20-c / sfx startup app ƒ / Shell ƒ / environment.c < prev    next >
Text File  |  1994-07-11  |  3KB  |  87 lines

  1. /**********************************************************************\
  2.  
  3. File:        environment.c
  4.  
  5. Purpose:    This module handles initializing the environment and
  6.             checking for various environmental characteristics.
  7.  
  8. This program is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation; either version 2 of the License, or
  11. (at your option) any later version.
  12.  
  13. This program is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with this program in a file named "GNU General Public License".
  20. If not, write to the Free Software Foundation, 675 Mass Ave,
  21. Cambridge, MA 02139, USA.
  22.  
  23. \**********************************************************************/
  24.  
  25. #include "environment.h"
  26. #include "program globals.h"
  27. #include "GestaltEqu.h"
  28. #include "Traps.h"
  29.  
  30. Boolean            gHasFSSpecs;                /* FSSpec calls supported? */
  31. Boolean            gHasNotificationManager;    /* notification manager present? (cf error.c) */
  32. Boolean            gHasGestalt;                /* Gestalt() implemented? */
  33.  
  34. /* This is to stop the compiler from using Gestalt glue without killing
  35.    all the other pre-system 7 glue for other routines. */
  36. #pragma parameter __D0 RealGestalt(__D0,__A1)
  37. pascal OSErr RealGestalt(OSType selector,long *response) = {0xA1AD,0x2288};
  38. #define        Gestalt            RealGestalt
  39. #define        GESTALT_TRAP    0xA1AD            /* _Gestalt */
  40.  
  41. #define    GetTrapType(T)    (((T & 0x0800) > 0) ? ToolTrap : OSTrap)
  42. #define NumToolboxTraps()    ((NGetTrapAddress(_InitGraf, ToolTrap) ==    \
  43.                             NGetTrapAddress(0xAA6E, ToolTrap)) ? 0x0200    \
  44.                             : 0x0400)
  45.  
  46. Boolean TrapAvailable(short theTrap);
  47.  
  48. Boolean TrapAvailable(short theTrap)
  49. {
  50.     TrapType        tType;
  51.     
  52.     tType=GetTrapType(theTrap);
  53.     if (tType==ToolTrap)
  54.     {
  55.         theTrap=theTrap&0x07FF;
  56.         if (theTrap>=NumToolboxTraps())
  57.             theTrap=_Unimplemented;
  58.     }
  59.     return (NGetTrapAddress(theTrap, tType)!=NGetTrapAddress(_Unimplemented, ToolTrap));
  60. }
  61.  
  62. short InitTheEnvironment(void)
  63. /* called very early -- this uses Gestalt to check out the computing environment;
  64.    see above for explanations of variables */
  65. {
  66.     long            gestalt_temp;
  67.     OSErr            isHuman;
  68.     SysEnvRec        theWorld;
  69.     
  70.     if (SysEnvirons(1, &theWorld)==envNotPresent)
  71.         return kSystemTooOld;
  72.     
  73.     gHasGestalt=TrapAvailable((short)GESTALT_TRAP);
  74.     
  75.     if (!gHasGestalt)
  76.         return kSystemTooOld;        /* requires Gestalt to function properly */
  77.     
  78.     isHuman=Gestalt(gestaltFSAttr, &gestalt_temp);
  79.     gHasFSSpecs=((isHuman==noErr) && (gestalt_temp&(1<<gestaltHasFSSpecCalls)));
  80.     
  81.     isHuman=Gestalt(gestaltNotificationMgrAttr, &gestalt_temp);
  82.     gHasNotificationManager=(!((isHuman) ||
  83.         (((gestalt_temp >> gestaltNotificationPresent) & 0x01) != 1)));
  84.     
  85.     return 0;
  86. }
  87.